<?php

/* require_once("../components/persistence/UsuarioDAO.class.php");
  require_once("../components/models/Usuario.class.php");
  require_once("../components/models/Permissao.class.php");
  require_once("../control/Conexao.class.php"); */

class UsuarioDAO {

    private $conexao_mysql = null;

    public function __construct() {
        $this->conexao_mysql = Conexao::getInstance();
    }

    public function insert($usuario) {
        $this->conexao_mysql->beginTransaction();
        try {
            $insert_sql = "INSERT INTO USUARIO (ID_PERMISSAO, APELIDO, LOGIN, SENHA, DATA_CAD, EMAIL) 
										VALUES (?, ?, ?, ?, ?, ?);";

            /*$permissaoDAO = new PermissaoDAO();
            $idPermissao = $permissaoDAO->insert($usuario->getPermissao());*/

            if ($idPermissao != "erro") {


                $stmt = $this->conexao_mysql->prepare($insert_sql);

                $stmt->bindParam(1, $idPermissao);
                $stmt->bindParam(2, $usuario->getApelido());
                $stmt->bindParam(3, $usuario->getLogin());
                $stmt->bindParam(4, $usuario->getSenha());
                $stmt->bindParam(5, $usuario->getDataCad());
                $stmt->bindParam(6, $usuario->getEmail());

                $stmt->execute();
                $this->conexao_mysql->commit();

                return $this->conexao_mysql->lastInsertId();
            }

            $this->conexao_mysql->rollBack();
        } catch (Exception $e) {
            $this->conexao_mysql->rollBack();
        }

        return "erro";
    }

    public function update($usuario) {
        try {
            $update_sql = "	UPDATE USUARIO SET APELIDO = ?, LOGIN = ?, SENHA = ?, EMAIL = ? WHERE ID_USUARIO = ?;";
        } catch (Exception $e) {
            $this->conexao_mysql->rollBack();
            return "erro";
        }
    }

    public function delete($id_usuario) {

        $usuario = new Usuario();
        $usuario = $this->selectByID($id_usuario);

        $this->conexao_mysql->beginTransaction();

        try {
            $permissaoDAO = new PermissaoDAO();
            $status_permissao = $permissaoDAO->delete($usuario->getPermissao());

            if ($status_permissao == "sucess") {
                $delete_sql = "DELETE FROM USUARIO WHERE ID_USUARIO = ?;";

                $stmt = $this->conexao_mysql->prepare($delete_sql);
                $stmt->execute(array($usuario->getIdUsuario()));
                $this->conexao_mysql->commit();
                return "sucess";
            }

            $this->conexao_mysql->rollBack();
            return "erro";
        } catch (Exception $e) {
            $this->conexao_mysql->rollBack();
            return "erro";
        }
    }

    public function selectByLogin($login) {
        $select_sql = "SELECT * FROM USUARIO U INNER JOIN PERMISSAO P ON U.ID_PERMISSAO = P.ID_PERMISSAO WHERE U.LOGIN=?";
        $stmt = $this->conexao_mysql->prepare($select_sql);
        $stmt->execute(array($login));
        $usuario = new Usuario();
        while ($row = $stmt->fetch()) {

            $usuario->setIdUsuario($row['ID_USUARIO']);
            $usuario->setApelido($row['APELIDO']);
            $usuario->setDataCad($row['DATA_CAD']);
            $usuario->setEmail($row['EMAIL']);
            $usuario->setLogin($row['LOGIN']);
            $usuario->setSenha($row['SENHA']);

/*
            $permissao = new Permissao();
            $permissao->setIdPermissao($row['ID_PERMISSAO']);
            $permissao->setParaCriar($row['CRIAR']);
            $permissao->setParaDespublicar($row['DESPUBLICAR']);
            $permissao->setParaEditar($row['EDITAR']);
            $permissao->setParaExcluir($row['EXCLUIR']);
            $permissao->setParaPublicar($row['PUBLICAR']);

            $usuario->setPermissao($permissao);
*/
        }

        return $usuario;
    }

    public function selectByID($id_usuario) {
        $select_sql = "SELECT * FROM USUARIO U INNER JOIN PERMISSAO P ON U.ID_PERMISSAO = P.ID_PERMISSAO WHERE U.ID_USUARIO=?";
        $stmt = $this->conexao_mysql->prepare($select_sql);
        $stmt->execute(array($id_usuario));
        $usuario = new Usuario();
        while ($row = $stmt->fetch()) {

            $usuario->setIdUsuario($row['ID_USUARIO']);
            $usuario->setApelido($row['APELIDO']);
            $usuario->setDataCad($row['DATA_CAD']);
            $usuario->setEmail($row['EMAIL']);
            $usuario->setLogin($row['LOGIN']);
            $usuario->setSenha($row['SENHA']);

            $permissao = new Permissao();
            $permissao->setIdPermissao($row['ID_PERMISSAO']);
            $permissao->setParaCriar($row['CRIAR']);
            $permissao->setParaDespublicar($row['DESPUBLICAR']);
            $permissao->setParaEditar($row['EDITAR']);
            $permissao->setParaExcluir($row['EXCLUIR']);
            $permissao->setParaPublicar($row['PUBLICAR']);

            $usuario->setPermissao($permissao);
        }

        return $usuario;
    }

    public function selectAll() {
        $select_sql = "SELECT * FROM USUARIO U INNER JOIN PERMISSAO P ON U.ID_PERMISSAO = P.ID_PERMISSAO";
        $stmt = $this->conexao_mysql->prepare($select_sql);
        $stmt->execute();
        $list_usuarios = null;
        $contador = 0;
        while ($row = $stmt->fetch()) {
            /* print_r($row); */

            $usuario = new Usuario();
            $usuario->setIdUsuario($row['ID_USUARIO']);
            $usuario->setApelido($row['APELIDO']);
            $usuario->setDataCad($row['DATA_CAD']);
            $usuario->setEmail($row['EMAIL']);
            $usuario->setLogin($row['LOGIN']);
            $usuario->setSenha($row['SENHA']);

            $permissao = new Permissao();
            $permissao->setIdPermissao($row['ID_PERMISSAO']);
            $permissao->setParaCriar($row['CRIAR']);
            $permissao->setParaDespublicar($row['DESPUBLICAR']);
            $permissao->setParaEditar($row['EDITAR']);
            $permissao->setParaExcluir($row['EXCLUIR']);
            $permissao->setParaPublicar($row['PUBLICAR']);

            $usuario->setPermissao($permissao);

            $list_usuarios[$contador] = $usuario;
            $contador += 1;
        }

        return $list_usuarios;
    }

}

?>